1. Field of the Inventive Concept
The present invention relates to data storage systems and more particularly relates to dynamic allocation of cache to one or more Logical Units (LUs) in a Small System Computer Interface (SCSI) data storage system.
2. Description of the Prior Art
Data storage systems process, compile, store, and/or communicate the data to a user as and when required. To provide effective and efficient processing and storage of the data, enhancing the performance of input/output (I/O) operations is important. Some data storage systems utilize cache memory (cache) to achieve enhanced I/O performance. Small Computer System Interface (SCSI) devices are increasingly becoming more common and widely deployed in many data storage systems. SCSI is a set of standards for connecting peripheral storage devices like disk drives, CD-ROM drives to a host device such as a mobile device, a server, a personal computer or the like. A SCSI device is a host adapter or intelligent peripheral storage devices which can be attached to a SCSI bus. SCSI devices are generally faster and are used in high performance data storage systems such as web servers. A SCSI data storage system comprising a SCSI device provides storage drives identified by a Logical Unit Number (LUN). Each LUN identifies a specific Logical Unit (LU), which may be a part of a hard disk drive, an entire hard disk, or several hard disks in a storage system. The LUN could reference an entire Redundant Array of Independent Disks (RAID) set, a single disk or partition, multiple hard disks, or multiple partitions within the hard disk. A SCSI device may use cache to improve the performance of the I/O operations.
The cache allocation policy implemented by a SCSI device for caching WRITEs to, or READs from, the LUs is expected to provide optimal usage of the cache and enhance the I/O performance of the SCSI device. However, most existing cache allocation policies in data storage systems are based on static cache allocation to each LU. The segment of cache allocated to each LU is further statically subdivided into a read cache sub portion and a write cache sub portion. Thus, once a segment of the cache is statically allocated it remains unavailable for allocation, even though the allocated segment is not used entirely by the LU. This effectively degrades cache usage.
Some existing cache allocation policies provide switching between fixed cache and scalable cache based on the I/O requirement in the data storage system. Addition of scalable cache increases hardware complexity. Some existing methods provide dynamic allocation of cache based on Quality of Service (QoS) traffic classes but fail to address dynamic allocation based on the requirements from each LU.
Data is transferred between the LU and the cache in data blocks of fixed size called logical blocks and each logical block is addressed by a unique Logical Block address (LBA). Whenever a data block is copied from the LU into the cache, a cache entry is created. Every cache entry includes the copied data and corresponding metadata. Moreover, searching through the metadata of a large number of cache entries in SCSI devices is tedious and time consuming operation. Thus, existing methods for SCSI devices invalidate all cache entries using a cache flush operation (for example, using a synchronize cache command) in the SCSI device cache when a predefined criterion is satisfied. However, flushing the cache is an expensive operation and frequent flushing degrades system performance.